package com.cc8w.util;


/**
 * 二进制byte通过中间char(十六机制字符)最终转为string (互转)
 * 
 * @author Administrator
 *
 */
public class Convert {
	
	
	
	public static String  byte2Hexstr(byte[] byt) {
		//因为byte占1字节(8位) String占4字节(32位)，这样强制转可定出问题(或者说转出来的字符串是乱码或不可视)
		//所以转成 十六进制的字符最好，因为十六进制的一个字符站半字节(4位) f->1111
		String hexString = "";
		
		char[] res = new char[byt.length * 2]; // 每个byte对应两个字符
        final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
        for (int i = 0, j = 0; i < byt.length; i++) {
            res[j++] = hexDigits[byt[i] >> 4 & 0x0f]; // 先存byte的高4位
            res[j++] = hexDigits[byt[i] & 0x0f]; // 再存byte的低4位
        }
        hexString += new String(res);
		
		return hexString;
	}
	
	public static byte[] hexstr2Byte(String hexString) {
		
		int length = hexString.length() / 2;   
        char[] hexChars = hexString.toCharArray();   
        byte[] bytes = new byte[length];   
        String hexDigits = "0123456789abcdef";
        for (int i = 0; i < length; i++) {   
            int pos = i * 2; // 两个字符对应一个byte
            int h = hexDigits.indexOf(hexChars[pos]) << 4; // 注1
            int l = hexDigits.indexOf(hexChars[pos + 1]); // 注2
            if(h == -1 || l == -1) { // 非16进制字符
                
            }
            bytes[i] = (byte) (h | l);   
        }  
		
		return bytes;
	}



	
	
	

}
